| ../. | |||||||||
| SEAC10 | |||||||||
| MTCT10 - TEDA11 | |||||||||
| JAVP31 | |||||||||
Leren omgaan met 3d visuele output uit het standpunt van een programmeur Verslag en Demo
listing 3dengine in js
1 var oog = -320
2 var diepte = -260
3 var width = 40
4 var height = 40
5 var cube = Array( Array(-40,40,40), Arr...
cube is een array van punten, de manier waarop de 3dengine objecten behandeld.
in dit geval een cubus:Array( Array(-40,40,40), Array(40,40,40), Array(-40,40,-40), Array(40,40,-40), Array(-40,-40,40), Array(40,-40,40), Array(-40,-40,-40), Array(40,-40,-40) ); 6
7 var fbuffer = makebuffer()
8
Makebuffer creert een 2dimensionale array met die als matrix zal dienen
9 function makebuffer() {
10 var fbuffer = Array();
11 for (var x = 0; x < height; x++) {
12 fbuffer[x] = Array();
13 }
14 return fbuffer;
15 }
16 de motor
17 function _3d22d(point) {
18 var persp = (diepte - oog) / (point[2] - oog );
19 var x2d = ( width / 2 ) + Math.floor( persp * (point[0]) );
20 var y2d = ( height / 2 ) + Math.floor( persp * (point[1]) );
21 return(Array(x2d,y2d))
22 }
23
movit verschuift het object met step stappen, als bijv. p1 van het object (3,4,5) is en step (5,-7,0) is de uiteindelijke positie (8,-3,5)
24 function moveIt(object,step) {
25 for (var i = 0; i<object.length; i++){
26 object[i][0] += step[0];
27 object[i][1] += step[1];
28 object[i][2] += step[2];
29 }
30 return object;
31 }
32
functietje om de cubus naar 2d te brengen
33 function docube() {
34 fbuffer = makebuffer();
35 for (var u=0; u < cube.length; u++) {
36 var tdc = _3d22d(cube[u]);
38 }
39 return fbuffer;
40 }
41
print de huidige buffer
42 function printbuffer() {
43 var rtv = "";
44 for (var i=0; i<fbuffer.length; i++) {
45 rtv += "\n";
46 for (var y=0; y<40; y++) {
47 if (fbuffer[y][i]){
48 rtv += "o";
49 } else {
50 rtv += "_";
51 }
52 }
53 }
54 document.getElementById('dis').value= rtv;
55 }
56
Bashom aan te tonen dat het principe in elke programmeertaal hetzelfde blijft een voorbeeld in bash, misschien dat het ooit nog handig gaat zijn voor 3d statistiekjes in een shell te laten draaien of iets dergerlijks. De functie print3d hieronder krijgt 3 argumenten mee (x, y, z) die hij middels ansi escape sequences op het scherm zet.
12 print3d () {
13 echo -ne "\e[$(( $(( ${2} * $(( DIEPTE - OOG / $(( ${3} - OOG )) )) )) / 20 ));$(( $(( ${1} * $(( DIEPTE - OOG / $(( ${3} - OOG )) )) )) / 20 ))Ho"
14
15 }
om in ANSI escape sequences 3d cubusjes door je shell heen te laten botsen.
referenceshttp://developer.netscape.com/viewsource/antar_vrml/antar_vrml.html http://www.webreference.com/js/column19/realtime.html http://www.morrowland.com/apron/article/technical/vector/index.php http://www.morrowland.com/apron/article/general/character%20animation/index.php http://www.visualbasicforum.com/t105276.html http://www.flashkit.com/movies/3D/Engines/Advanced-SubDream-2464/index.php http://tav.kiev.ua/~om/lussier/3d.htm http://www.flashkit.com/tutorials/3D/3D_Engin-KStor-189/index.php | |||||||||
| HCIK10 - LING11 | |||||||||
| FULO01 | |||||||||
| FOTO10 | |||||||||
| CCP411 - CCP421 | |||||||||
| ANIM31 | |||||||||